/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.latesis.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
 *
 * @author Alan -  Desarrollo
 */
@Entity
@Table(name = "TBL_MOVIL")
public class MovilBean implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Long id;
    @Column(name="codigo",length = 10)
        private String codigo;
    @Column(name="placa",length = 7)
        private String placa;
    @Column(name="color",length = 10)
        private String color;
    @Column(name="marca",nullable=true,length = 15)
        private String marca;
    @Column(name="modelo",nullable=true, length = 20)
        private String modelo;
    @Column(name="estado",length = 1)
        private String estado;    
        
    @Column(name="pesoSeco", nullable = true)
        private Double pesoSeco;
    @Column(name="pesoBruto", nullable = true)
        private Double pesoBruto;
    @Column(name="longitud", nullable = true)
        private Double longitud;
    @Column(name="altura", nullable = true)
        private Double altura;
    @Column(name="ancho", nullable = true)
        private Double ancho;
    @Column(name="cargaUtil", nullable = true)
        private Double cargaUtil;
    
    @Column(name="combustible",length = 15, nullable = true)
        private String combustible;
    @Column(name="numTarjetaPropiedad",length = 15, nullable = true)
        private String numTarjetaPropiedad;
    @Column(name="numSOAT",length = 15, nullable = true)
        private String numSOAT;
    @Column(name="observacion",length = 400, nullable = true)
        private String observacion;
    
    @Column(name="fechaInicioSOAT", nullable = true)
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date fechaInicioSOAT;
    @Column(name="fechaVenceSOAT", nullable = true)
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date fechaVenceSOAT;
    @Column(name="fechaIngreso", nullable = true)
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date fechaIngreso;    
    
    @ManyToOne(optional = true, fetch = FetchType.LAZY)
    @JoinColumn(name="propietarioId")
        private PropietarioBean propietario; 
    
    @ElementCollection(fetch = FetchType.LAZY)
    @CollectionTable(name="TBL_FOTO_MOVIL", joinColumns=@JoinColumn(name="movilId"))
    @Column(name="foto")
    private List<String> fotosMovil;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "moviles")
    private List<ChoferBean>  choferes;
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy="movil")
    private List<MarcacionBean> marcaciones;
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy="movil")
    private List<AsignacionServicioBean> asignaciones;
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy="movil")
    private List<AlertaEnviadaBean> alertasEnviadas;
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy="movil")
    private List<TrackingBean> tracking;
    
    //@OneToOne(fetch = FetchType.EAGER, optional = true)
    @ManyToOne(fetch = FetchType.EAGER, optional = true)
    @JoinColumn(name="ultimoTrackingId")
    private TrackingBean ultimoTracking;
    //@OneToOne(fetch = FetchType.EAGER, optional = true)
    @ManyToOne(fetch = FetchType.EAGER, optional = true)    
    @JoinColumn(name="ultimaMarcacionId")
    private MarcacionBean ultimaMarcacion;
    
    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "moviles")
    private List<GrupoBean> grupos;
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "movil")
    private List<ServicioBean> servicios;
        
    public MovilBean() {
        fotosMovil=new ArrayList<String>();
        choferes=new ArrayList<ChoferBean>();
        marcaciones=new ArrayList<MarcacionBean>();
        asignaciones=new ArrayList<AsignacionServicioBean>();
        tracking=new ArrayList<TrackingBean>();
        grupos=new ArrayList<GrupoBean>();
        servicios=new ArrayList<ServicioBean>();
        alertasEnviadas=new ArrayList<AlertaEnviadaBean>();
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public String getPlaca() {
        return placa;
    }

    public void setPlaca(String placa) {
        this.placa = placa;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public Double getPesoSeco() {
        return pesoSeco;
    }

    public void setPesoSeco(Double pesoSeco) {
        this.pesoSeco = pesoSeco;
    }

    public Double getPesoBruto() {
        return pesoBruto;
    }

    public void setPesoBruto(Double pesoBruto) {
        this.pesoBruto = pesoBruto;
    }

    public Double getLongitud() {
        return longitud;
    }

    public void setLongitud(Double longitud) {
        this.longitud = longitud;
    }

    public Double getAltura() {
        return altura;
    }

    public void setAltura(Double altura) {
        this.altura = altura;
    }

    public Double getAncho() {
        return ancho;
    }

    public void setAncho(Double ancho) {
        this.ancho = ancho;
    }

    public Double getCargaUtil() {
        return cargaUtil;
    }

    public void setCargaUtil(Double cargaUtil) {
        this.cargaUtil = cargaUtil;
    }

    public String getCombustible() {
        return combustible;
    }

    public void setCombustible(String combustible) {
        this.combustible = combustible;
    }

    public String getNumTarjetaPropiedad() {
        return numTarjetaPropiedad;
    }

    public void setNumTarjetaPropiedad(String numTarjetaPropiedad) {
        this.numTarjetaPropiedad = numTarjetaPropiedad;
    }

    public String getNumSOAT() {
        return numSOAT;
    }

    public void setNumSOAT(String numSOAT) {
        this.numSOAT = numSOAT;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public Date getFechaInicioSOAT() {
        return fechaInicioSOAT;
    }

    public void setFechaInicioSOAT(Date fechaInicioSOAT) {
        this.fechaInicioSOAT = fechaInicioSOAT;
    }

    public Date getFechaVenceSOAT() {
        return fechaVenceSOAT;
    }

    public void setFechaVenceSOAT(Date fechaVenceSOAT) {
        this.fechaVenceSOAT = fechaVenceSOAT;
    }

    public Date getFechaIngreso() {
        return fechaIngreso;
    }

    public void setFechaIngreso(Date fechaIngreso) {
        this.fechaIngreso = fechaIngreso;
    }

    
    public PropietarioBean getPropietario() {
        return propietario;
    }

    public void setPropietario(PropietarioBean propietario) {
        this.propietario = propietario;
    }

    public List<String> getFotosMovil() {
        return fotosMovil;
    }

    public void setFotoMovil(List<String> fotosMovil) {
        this.fotosMovil = fotosMovil;
    }

    public List<ChoferBean> getChoferes() {
        return choferes;
    }

    public void setChoferes(List<ChoferBean> choferes) {
        this.choferes = choferes;
    }

    public List<MarcacionBean> getMarcaciones() {
        return marcaciones;
    }

    public void setMarcaciones(List<MarcacionBean> marcaciones) {
        this.marcaciones = marcaciones;
    }    

    public List<TrackingBean> getTracking() {
        return tracking;
    }

    public void setTracking(List<TrackingBean> tracking) {
        this.tracking = tracking;
    }

    public TrackingBean getUltimoTracking() {
        return ultimoTracking;
    }

    public void setUltimoTracking(TrackingBean ultimoTracking) {
        this.ultimoTracking = ultimoTracking;
    }

    public List<GrupoBean> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<GrupoBean> grupos) {
        this.grupos = grupos;
    }

    public List<AlertaEnviadaBean> getAlertasEnviadas() {
        return alertasEnviadas;
    }

    public void setAlertasEnviadas(List<AlertaEnviadaBean> alertas) {
        this.alertasEnviadas = alertas;
    }

    public List<ServicioBean> getServicios() {
        return servicios;
    }

    public void setServicios(List<ServicioBean> servicios) {
        this.servicios = servicios;
    }

    public MarcacionBean getUltimaMarcacion() {
        return ultimaMarcacion;
    }

    public void setUltimaMarcacion(MarcacionBean ultimaMarcacion) {
        this.ultimaMarcacion = ultimaMarcacion;
    }

    public List<AsignacionServicioBean> getAsignaciones() {
        return asignaciones;
    }

    public void setAsignaciones(List<AsignacionServicioBean> asignaciones) {
        this.asignaciones = asignaciones;
    }
    

    
}
